package com.edais.util;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.beans.factory.annotation.Autowired;

import com.edais.dao.UserDao;
import com.edais.service.UserService;
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

public class FtpUtil {
	
	@Autowired
	private UserService userService;
	
	/**
	 * 上传程序方法
	 * 
	 */
	public static boolean uploadFile(String url, String username,
			String password, String path, String filename, InputStream input)
			throws Exception {

		// filename:要上传的文件

		// path :上传的路径

		// 初始表示上传失败

		boolean success = false;
		// 创建FTPClient对象
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			// 连接FTP服务器
			// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.connect(url);
			// 下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
			ftp.setControlEncoding("GBK");
			FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
			conf.setServerLanguageCode("zh");
			// 登录ftp
			ftp.login(username, password);
			// 看返回的值是不是230，如果是，表示登陆成功
			reply = ftp.getReplyCode();
			// 以2开头的返回值就会为真
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				System.out.println("连接服务器失败");
				return success;
			}
			System.out.println("登陆服务器成功");
			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
			FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
			System.out.println(fs.length);
			System.out.println(filename);
			String filename1 = FtpUtil.changeName(filename, fs);
			String filename2 = new String(filename1.getBytes("GBK"),
					"ISO-8859-1");
			String path1 = new String(path.getBytes("GBK"), "ISO-8859-1");
			// 转到指定上传目录
			ftp.changeWorkingDirectory(path1);
			// 将上传文件存储到指定目录
			// ftp.appendFile(new String(filename.getBytes("GBK"),"ISO-8859-1"),
			// input);
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			// 如果缺省该句 传输txt正常 但图片和其他格式的文件传输出现乱码
			ftp.storeFile(filename2, input);
			// 关闭输入流
			input.close();
			// 退出ftp
			ftp.logout();
			// 表示上传成功
			success = true;
			System.out.println("上传成功。。。。。。");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;

	}

	/**
	 * 上传程序方法(文件名变加密串)
	 * @param url 	FTP服务器地址
	 * @param username 	FTP服务器用户名
	 * @param password	FTP服务器密码
	 * @param path	FTP服务器上传的路径
	 * @param filename	要上传的文件名称
	 * @param input	输入流
	 */
	public static String uploadFile2(String url, String username,
			String password, String path, String filename, InputStream input)
			throws Exception {
		// 返回文件名
		String fileNameResult = "";
		// 初始表示上传失败
		boolean flag = false;
		// 创建FTPClient对象
		FTPClient ftp = new FTPClient();
		
		try {
			int reply;
			// 连接FTP服务器
			// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.connect(url);
			// 下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
			ftp.setControlEncoding("GBK");
			FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
			conf.setServerLanguageCode("zh");
			// 登录ftp
			ftp.login(username, password);
			// 看返回的值是不是230，如果是，表示登陆成功
			reply = ftp.getReplyCode();
			// 以2开头的返回值就会为真
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				System.out.println("连接服务器失败");
			}
			System.out.println("登陆服务器成功");
			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
			FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
			//System.out.println(fs.length);
			//System.out.println("上传文件路径"+path);
			//System.out.println("上传前文件名称："+filename);
			Calendar calendar = Calendar.getInstance();
			fileNameResult = ""
					+filename.substring(0,filename.indexOf('.'))
					+"-"
					+String.valueOf(calendar.getTimeInMillis())
					+filename.substring(filename.indexOf('.'),filename.length());
//			filenameResult = 
//					String.valueOf(calendar.getTimeInMillis())	
//					+filename.substring(filename.indexOf('.'),filename.length());
			
			// String filename1 = FtpUtil.changeName(filename, fs);
			String filename2 = new String(fileNameResult.getBytes("GBK"),
					"ISO-8859-1");
			String path1 = new String(path.getBytes("GBK"), "ISO-8859-1");
			// 转到指定上传目录
			ftp.changeWorkingDirectory(path1);
			// 将上传文件存储到指定目录
			// ftp.appendFile(new String(filename.getBytes("GBK"),"ISO-8859-1"),
			// input);
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			// 如果缺省该句 传输txt正常 但图片和其他格式的文件传输出现乱码
			ftp.storeFile(filename2, input);
			System.out.println("上传后文件名称："+filename2);
			// System.out.println("上传后文件字节数："+input.available());
			// 关闭输入流
			input.close();
			// 退出ftp
			ftp.logout();
			// 表示上传成功
			flag = true;
			System.out.println("上传成功。。。。。。");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return fileNameResult;
	}
	
	/**
	 * 上传程序方法（重名覆盖）
	 * 
	 */
	public static boolean uploadFile3(String url, String username,
			String password, String path, String filename, InputStream input)
			throws Exception {
		// filename:要上传的文件

		// path :上传的路径

		// 初始表示上传失败

		boolean success = false;
		// 创建FTPClient对象
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			// 连接FTP服务器
			// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.connect(url);
			// 下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
			ftp.setControlEncoding("GBK");
			FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
			conf.setServerLanguageCode("zh");
			// 登录ftp
			ftp.login(username, password);
			// 看返回的值是不是230，如果是，表示登陆成功
			reply = ftp.getReplyCode();
			// 以2开头的返回值就会为真
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				System.out.println("连接服务器失败");
				return success;
			}
			System.out.println("登陆服务器成功");
			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
			FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
			System.out.println(fs.length);
			System.out.println(filename);
			//String filename1 = FtpUtil.changeName(filename, fs);
			//String filename2 = new String(filename1.getBytes("GBK"),
			//		"ISO-8859-1");
			String path1 = new String(path.getBytes("GBK"), "ISO-8859-1");
			// 转到指定上传目录
			ftp.changeWorkingDirectory(path1);
			// 将上传文件存储到指定目录
			// ftp.appendFile(new String(filename.getBytes("GBK"),"ISO-8859-1"),
			// input);
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			// 如果缺省该句 传输txt正常 但图片和其他格式的文件传输出现乱码
			ftp.storeFile(filename, input);
			// 关闭输入流
			input.close();
			// 退出ftp
			ftp.logout();
			// 表示上传成功
			success = true;
			System.out.println("上传成功。。。。。。");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;

	}
	
	/**
	 * 获得ftp配置信息，从参数配置表里面
	 * @return
	 */
	public Map<String, String> getSetting() {
		Map<String, String> map = new HashMap<String, String>();
		map.put("ftpUrl1", "192.168.16.222");
		map.put("ftpUrl1_userLogin", "ftpuser");
		map.put("ftpUrl1_password", "ftpuser");
		//map.put("ftpUrl1_path", "/guqianbao/");
		//map.put("ftpBanner_path", "/home/weblogic/war/EDAIWeb/banner/");
		map.put("ftpHeadImage_path", "d:/");
		map.put("mobile_visit_Ip", "http://172.17.34.102:7007");
		System.out.println(map);
		return map;
	}
	
	/**
	 * 根据文件名和文件输入流进行上传
	 * @param fileName 文件名称
	 * @param is 文件输入流
	 */
	public String uploadFileInputStream(String fileName,InputStream fileInputStream){
		FtpUtil fu = new FtpUtil();
		//String imageFileName = "head.jpg";//文件名称
		//InputStream is = null;//文件输入流
		//File f1 = new File(realPath + File.separator + imageFileName);
		//File f1 = new File("D:\\head.jpg");
		//InputStream fileInputStream = null;
		//结果
		String ftpPath = null;
		try {
		//	fileInputStream = new FileInputStream(f1);
		//fu.uploadFile2(url, username, password, path, filename, input);
		Map<String, String> map=fu.getSetting();
		String logoName = FtpUtil.uploadFile2(
				map.get("ftpUrl1"),//ip 172.17.34.xxx类似	172.17.34.102
				map.get("ftpUrl1_userLogin"),//ftp登录名
				map.get("ftpUrl1_password"),//ftp登录密码
				map.get("ftpHeadImage_path"),//文件上传的相对路径，紧跟在ip后面的地址字符串“/.../”
				fileName,//文件名称
				fileInputStream);//文件输入流
		ftpPath = map.get("mobile_visit_Ip")+map.get("ftpHeadImage_path")+logoName;
		System.out.println(ftpPath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ftpPath;
	}
	
	
	/**
	 * 根据文件名和文件输入流进行上传
	 * @param fileName 文件名称
	 * @param is 文件输入流
	 * @throws FileNotFoundException 
	 */
	public String uploadString(String fileName,String str) throws FileNotFoundException{
		FtpUtil fu = new FtpUtil();
		//测试参数
		Map<String, String> map=fu.getSetting();
		
		//String imageFileName = "head.jpg";//文件名称
		//InputStream is = null;//文件输入流
		//File f1 = new File(realPath + File.separator + imageFileName);
		//File f1 = new File("D:\\head.jpg");
		//测试
		//FileInputStream fileInputStream = new FileInputStream(f1);
		//System.out.println("文件长度："+str.length());
		InputStream streamTemp = new ByteArrayInputStream(str.getBytes()); 
		
		String ftpPath = null;
		try {
			
		String logoName = FtpUtil.uploadFile2(
				map.get("ftpUrl1"),//ip 172.17.34.xxx类似	172.17.34.102
				map.get("ftpUrl1_userLogin"),//ftp登录名
				map.get("ftpUrl1_password"),//ftp登录密码
				map.get("ftpHeadImage_path"),//文件上传的相对路径，紧跟在ip后面的地址字符串“/.../”
				fileName,//文件名称
				streamTemp);//文件输入流
		ftpPath = map.get("mobile_visit_Ip")+map.get("ftpHeadImage_path")+logoName;
		System.out.println(ftpPath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ftpPath;
	}
	
	/**
	 * 根据文件名和文件输入流进行上传
	 * @param fileName 文件名称
	 * @param is 文件输入流
	 * @throws FileNotFoundException 
	 */
	public String uploadByte(String fileName,byte[] buf) throws FileNotFoundException{
		FtpUtil fu = new FtpUtil();
		//测试参数
		Map<String, String> map=fu.getSetting();
		
		InputStream streamTemp = fu.byte2Input(buf);
		//InputStream streamTemp = new ByteArrayInputStream(str.getBytes()); 
		
		String ftpPath = null;
		try {
		String logoName = FtpUtil.uploadFile2(
				map.get("ftpUrl1"),//ip 172.17.34.xxx类似	172.17.34.102
				map.get("ftpUrl1_userLogin"),//ftp登录名
				map.get("ftpUrl1_password"),//ftp登录密码
				map.get("ftpHeadImage_path"),//文件上传的相对路径，紧跟在ip后面的地址字符串“/.../”
				fileName,//文件名称
				streamTemp);//文件输入流
		ftpPath = map.get("mobile_visit_Ip")+map.get("ftpHeadImage_path")+logoName;
		System.out.println(ftpPath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ftpPath;
	}
	
	/**
	 * 根据文件名和文件输入流进行上传
	 * @param fileName 文件名称
	 * @param is 文件输入流
	 * @throws FileNotFoundException 
	 */
	public String uploadByteAgreement(String fileName,byte[] buf, String ftpAgreementUrl, String ftpAgreementName, String ftpAgreementPwd, String ftpAgreementPath) throws FileNotFoundException{
		FtpUtil fu = new FtpUtil();
		//测试参数
		Map<String, String> map=fu.getSetting();
		
		InputStream streamTemp = fu.byte2Input(buf);
		//InputStream streamTemp = new ByteArrayInputStream(str.getBytes()); 
		
		String ftpPath = null;
		try {
		FtpUtil.uploadFile3(
				ftpAgreementUrl,
				ftpAgreementName,
				ftpAgreementPwd,
				ftpAgreementPath,
				fileName,//文件名称
				streamTemp);//文件输入流
		//ftpPath = map.get("mobile_visit_Ip")+map.get("ftpHeadImage_path")+logoName;
		//System.out.println(ftpPath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ftpPath;
	}
	
	/**
	 * 测试方法
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		FtpUtil fu = new FtpUtil();
//		String fileName = "head.jpg";//文件名称
//		String str = null;//文件输入流
//		InputStream fileInputStream = null;//文件输入流
//		//File f1 = new File(realPath + File.separator + imageFileName);
//		File f1 = new File("D:/log/user/user.log");
//			try {
//				fileInputStream = new FileInputStream(f1);
//			} catch (FileNotFoundException e) {
//				e.printStackTrace();
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		//1.传入输入流(成功)
//		//fu.uploadFileInputStream(fileName,fileInputStream);
//		//2.传入字符串
//		//str = fu.inputStream2String(fileInputStream);
//		//str = fu.inputStream2String2(fileInputStream);
//		//fu.uploadString(fileName,str);
//		//3.传入字节(成功)
//		byte[] in2b= fu.input2byte(fileInputStream);
//		fu.uploadByte(fileName,in2b);
	
		//3.传入字节
		//byte[] in2b = str.getBytes();
		//byte[] in2b = fu.hex2byte(str);
		//fu.uploadByte(fileName,in2b);

		//2.传入字符串
		//str = fu.inputStream2String(fileInputStream);
		//str = fu.inputStream2String2(fileInputStream);
		//fu.uploadString(fileName,str);
		try {
			boolean flg = fu.fileIsExists("", "ftpuser", "ftpuser", "", "101332751210443.html");
			System.out.println(flg);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 图片内容从字符串形式转换成二进制形式
	 * 
	 * @param str
	 * @return
	 */
	public static byte[] hex2byte(String str) { // 字符串转二进制
		if (str == null)
			return null;
		str = str.trim();
		str = str.replace(" ", "");
		int len = str.length();
		if (len == 0 || len % 2 == 1)
			return null;
		byte[] b = new byte[len / 2];
		try {
			for (int i = 0; i < str.length(); i += 2) {
				b[i / 2] = (byte) Integer
						.decode("0x" + str.substring(i, i + 2)).intValue();
			}
			return b;
		} catch (Exception e) {
			return null;
		}
	}
	
	/**
	 * 将输入流转换为字符串
	 * @param is
	 * @return
	 */
	public String convertStreamToString (InputStream is) {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		StringBuilder sb = new StringBuilder();
		String line = null;
		try {
			while ((line = reader.readLine()) != null) {
				sb.append(line + "/n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}
	
	/**
	 * 将输入流转换为字符串
	 * @param is
	 * @return
	 */
	public String inputStream2String3(InputStream in) throws IOException {
		StringBuffer out = new StringBuffer();
		byte[] b = new byte[4096];
		for (int n; (n = in.read(b)) != -1;) {
			out.append(new String(b, 0, n));
		}
		return out.toString();
	}

	/**
	 * 将输入流转换为字符串
	 * @param is
	 * @return
	 */
	public static String inputStream2String1 (InputStream is) throws IOException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int i = -1;
		while ((i = is.read()) != -1) {
			baos.write(i);
		}
		return baos.toString();
	}
	
	
	/**
	 * 字节转换为输入流
	 * @param buf
	 * @return
	 */
    public static final InputStream byte2Input(byte[] buf) {  
        return new ByteArrayInputStream(buf); 
    }  
  
    /**
     * 输入流转换为字节
     * @param inStream
     * @return
     * @throws IOException
     */
    public static final byte[] input2byte(InputStream inStream)  
            throws IOException {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();  
        byte[] buff = new byte[100];  
        int rc = 0;  
        while ((rc = inStream.read(buff, 0, 100)) > 0) {  
            swapStream.write(buff, 0, rc);  
        }  
        byte[] in2b = swapStream.toByteArray();  
        return in2b;  
    }
    
	
	/***
	 * 输入流to字符串
	 * @param is
	 * @return
	 * @throws IOException
	 */
	public static String inputStream2String2(InputStream is) throws IOException{
        ByteArrayOutputStream  baos = new ByteArrayOutputStream(); 
        int  i=-1; 
        while((i=is.read())!=-1){
        	baos.write(i); 
        }
        baos.flush();
       return baos.toString(); 
	}
	/***
	 * 字符串to输入流
	 * @param is
	 * @return
	 * @throws IOException
	 */
	public static InputStream String2inputStream2(String str) throws IOException{
		InputStream   in_nocode   =   new   ByteArrayInputStream(str.getBytes());
		//InputStream   in_withcode   =   new   ByteArrayInputStream(str.getBytes("UTF-8"));  
       return in_nocode;
	}
	
	/***
	 * 输入流to字符串
	 * @param is
	 * @return
	 * @throws IOException
	 */
	String inputStream2String(InputStream is) throws IOException{
		   BufferedReader in = new BufferedReader(new InputStreamReader(is));
		   StringBuffer buffer = new StringBuffer();
		   String line = "";
		   while ((line = in.readLine()) != null){
		     buffer.append(line);
		   }
		   return buffer.toString();
		}
	
	/**
	 * 
	 * 删除程序
	 * 
	 * 
	 */
	public static boolean deleteFile(String url, String username,
			String password, String path, String filename) throws Exception {
		// filename:要上传的文件
		// path :上传的路径
		// 初始表示上传失败
		boolean success = false;
		// 创建FTPClient对象
		FTPClient ftp = new FTPClient();
		int reply;
		// 连接FTP服务器
		// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
		ftp.connect(url);
		// 下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
		ftp.setControlEncoding("GBK");
		FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
		conf.setServerLanguageCode("zh");
		// 登录ftp
		ftp.login(username, password);
		// 看返回的值是不是230，如果是，表示登陆成功
		reply = ftp.getReplyCode();
		// 以2开头的返回值就会为真
		if (!FTPReply.isPositiveCompletion(reply)) {
			ftp.disconnect();
			System.out.println("连接服务器失败");
			return success;
		}
		System.out.println("登陆服务器成功");
		String filename2 = new String(filename.getBytes("GBK"), "ISO-8859-1");
		String path1 = new String(path.getBytes("GBK"), "ISO-8859-1");
		// 转到指定上传目录
		ftp.changeWorkingDirectory(path1);
		FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
		ftp.deleteFile(filename2);
		ftp.logout();
		success = true;
		return success;
	}

	/**
	 * 
	 * 下载程序
	 * 
	 * 
	 */

	public static boolean downFile(String ip, String username, String password,
			String remotePath, String fileName, OutputStream outputStream,
			HttpServletResponse response) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(ip);
			// 下面三行代码必须要，而且不能改变编码格式
			ftp.setControlEncoding("GBK");
			FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
			conf.setServerLanguageCode("zh");
			// 如果采用默认端口，可以使用ftp.connect(url) 的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			System.out.println("登陆成功。。。。");
			ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
			FTPFile[] fs = ftp.listFiles(); // 得到目录的相应文件列表
			// System.out.println(fs.length);//打印列表长度
			for (int i = 0; i < fs.length; i++) {
				FTPFile ff = fs[i];
				if (ff.getName().equals(fileName)) {
					String filename = fileName;
					// 这个就就是弹出下载对话框的关键代码
					response.setHeader(
							"Content-disposition",
							"attachment;filename="
									+ URLEncoder.encode(filename, "utf-8"));
					// 将文件保存到输出流outputStream中
					ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),
							"ISO-8859-1"), outputStream);
					outputStream.flush();
					outputStream.close();
				}
			}
			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;

	}

	// 判断是否有重名方法
	public static boolean isDirExist(String fileName, FTPFile[] fs) {
		for (int i = 0; i < fs.length; i++) {
			FTPFile ff = fs[i];
			if (ff.getName().equals(fileName)) {
				return true; // 如果存在返回 正确信号
			}
		}
		return false; // 如果不存在返回错误信号

	}

	// 根据重名判断的结果 生成新的文件的名称

	public static String changeName(String filename, FTPFile[] fs) {
		int n = 0;
		// 创建一个可变的字符串对象 即StringBuffer对象，把filename值付给该对象
		StringBuffer filename1 = new StringBuffer("");
		filename1 = filename1.append(filename);
		System.out.println(filename1);
		while (isDirExist(filename1.toString(), fs)) {
			n++;
			String a = "[" + n + "]";
			System.out.println("字符串a的值是：" + a);
			int b = filename1.lastIndexOf(".");// 最后一出现小数点的位置
			int c = filename1.lastIndexOf("[");// 最后一次"["出现的位置
			if (c < 0) {
				c = b;
			}
			StringBuffer name = new StringBuffer(filename1.substring(0, c));// 文件的名字
			StringBuffer suffix = new StringBuffer(filename1.substring(b + 1));// 后缀的名称
			filename1 = name.append(a).append(".").append(suffix);
		}
		return filename1.toString();
	}

	/**
	 * @param fileame 
	 * @param string4 
	 * @param string3 
	 * @param string2 
	 * @param string 
	 * @param fileName
	 * @return function:从服务器上读取指定的文件
	 * @throws ParseException
	 * @throws IOException
	 */
	public static String readFile(String url, String username,
			String password, String path, String filename) throws Exception {
		
		FTPClient ftp = new FTPClient();
		int reply;
		// 连接FTP服务器
		// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
		ftp.connect(url);
		// 下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
		ftp.setControlEncoding("GBK");
		FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
		conf.setServerLanguageCode("zh");
		// 登录ftp
		ftp.login(username, password);
		// 看返回的值是不是230，如果是，表示登陆成功
		reply = ftp.getReplyCode();
		// 以2开头的返回值就会为真
		if (!FTPReply.isPositiveCompletion(reply)) {
			ftp.disconnect();
			System.out.println("连接服务器失败");
		}
		System.out.println("登陆服务器成功");
		ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
		
		InputStream ins = null;
		StringBuilder builder = null;
		try {
			// 从服务器上读取指定的文件
			ins = ftp.retrieveFileStream(filename);
			BufferedReader reader = new BufferedReader(new InputStreamReader(ins, "UTF-8"));
			String line;
			builder = new StringBuilder(150);
			while ((line = reader.readLine()) != null) {
				System.out.println(line);
				builder.append(line);
			}
			reader.close();
			if (ins != null) {
				ins.close();
			}
			// 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个返回null问题
			ftp.getReply();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return builder.toString();
	}
	
	/**
	 * @param fileame 
	 * @param string4 
	 * @param string3 
	 * @param string2 
	 * @param string 
	 * @param fileName
	 * @return function:从服务器上读取指定的文件
	 * @throws ParseException
	 * @throws IOException
	 */
	public static boolean fileIsExists(String url, String username,
			String password, String path, String filename) throws Exception {
		boolean flg = false;
		FTPClient ftp = new FTPClient();
		int reply;
		// 连接FTP服务器
		// 如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
		ftp.connect(url);
		// 下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
		ftp.setControlEncoding("GBK");
		FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
		conf.setServerLanguageCode("zh");
		// 登录ftp
		ftp.login(username, password);
		// 看返回的值是不是230，如果是，表示登陆成功
		reply = ftp.getReplyCode();
		// 以2开头的返回值就会为真
		if (!FTPReply.isPositiveCompletion(reply)) {
			ftp.disconnect();
			System.out.println("连接服务器失败");
		}
		System.out.println("登陆服务器成功");
		ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录
		
		InputStream ins = null;
		//StringBuilder builder = null;
		try {
			// 从服务器上读取指定的文件
			ins = ftp.retrieveFileStream(filename);
			if(ins != null) {
				flg = true;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flg;
	}

}
